﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Info : System.Web.UI.Page
{
    //DropDownList数据源集合
    private List<MyItem> myItems = new List<MyItem>();

    //创建数据集
    protected void Page_Init(object sender, EventArgs e)
    {
        CreateData();
    }

    //初始化
    protected void Page_Load(object sender, EventArgs e)
    {
        //定义下拉列表显示项相关属性
        DdlProvince.DataTextField = "ItemText";
        DdlProvince.DataValueField = "itemValue";
        DdlCity.DataTextField = "ItemText";
        DdlCity.DataValueField = "itemValue";

        if (!IsPostBack)
        {
            //LblTrueName.CssClass = ".input_title";
            //DdLJiGuan.Items.Add("天津市");
            //DdlProvince.Items.Add(new ListItem("天津市","tj"));
            Predicate<MyItem> _p = _f;//第一种委托写法，委托直接赋值，后面写一个方法
            //DataSource：设置数据源
            DdlProvince.DataSource = myItems.FindAll(_p);
            //DataBind()：绑定数据源
            DdlProvince.DataBind();
            //设置加载网页后，默认选择的是--》北京市
            DdlProvince.SelectedIndex = 0;

            //第二种定义委托的方法，不用去定义一个方法，直接定义的时候构造匿名函数，更方便
            DdlCity.DataSource = myItems.FindAll(delegate (MyItem myItem)
            {
                return myItem.ItemParent == DdlProvince.SelectedValue;
            });
            DdlCity.DataBind();

            //向List Box里面添加内容
            LbSkill.Items.Add(new ListItem("C语言", "c"));
            LbSkill.Items.Add(new ListItem("Java语言", "java"));
            LbSkill.Items.Add(new ListItem("C#语言", "csharp"));

            BtnSubmit.Enabled = false;

            //Image控件的ImageUrl属性：在界面设计或编程时指定图片源文件
            //Imgavtar.ImageUrl = "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201508%2F15%2F20150815131712_fEyPM.jpeg&refer=http%3A%2F%2Fb-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1622891431&t=0bfc99f72b5a059848181ff229425689";

            //Literal控件与label控件的区别：Literal控件可以在页面上显示文本，
            //Literal控件可以控制文本编码方式    但Literal控件无法应用样式
            //label包含<span>
            //Literal的Mode属性：Transform/PassThrough（直接传送过去原样，加载html标签，在浏览器里以标签的形式展示） Encode（编码方式，显示标签，标签原样输出）
            Literal2.Mode = LiteralMode.Encode;
            Literal2.Text = "<b>Literal可以拼接html字符串";

            //BulletedList列表控件
            //创建方法1
            //BulletedList1.Items.Add("列表项一");
            //BulletedList1.Items.Add("列表项二");
            //BulletedList1.Items.Add("列表项三");
            //创建方法2
            List<string> _data = new List<string>(){ "列表项一",
                                         "列表项二", "列表项三" };
            BulletedList1.DataSource = _data;
            BulletedList1.DataBind();

        }
    }

    protected void BtnSubmit_Click(object sender, EventArgs e)
    {
        Response.Write("提交信息成功<br>");
        LblFav.Text = "选择为：";
        foreach (ListItem item in ChklFav.Items)
        {
            if (item.Selected)
                LblFav.Text += item.Text + "&nbsp;";
        }
        //如果单选按钮选择为男，则在后面的label上显示为男
        //RadioButton控件使用checked属性：默认为false，表示默认不选择
        //RadioButton控件使用checked属性：设置为true，表示默认选择
        if (RbMale.Checked)
        {
            LblGender.Text = RbMale.Text;
        }
        //如果单选按钮选择为女，则在后面的label上显示为女
        if (RbFemale.Checked)
        {
            LblGender.Text = RbFemale.Text;
        }
        //获取RadioButtonList控件的选中项使用SelectedItem属性
        if (RblDegree.SelectedItem != null)
        {
            //根据单选按钮列表选择的内容，在后面的label上显示
            LblDegree.Text = RblDegree.SelectedItem.Text;
        }

    }

    //如果不设置PostBackUrl="~/Default.aspx"属性，
    //则在Click方法上用Redirect方法也可以实现相同效果
    protected void LinkButton1_Click(object sender, EventArgs e)
    {
        Response.Redirect("~/Default.aspx");
    }

    protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
    {
        Response.Write("图片按钮提交成功");
    }

    //SelectedIndexChanged：下拉列表多级菜单联动属性，一定要启用IsPostBack
    protected void DdlProvince_SelectedIndexChanged(object sender, EventArgs e)
    {
        //DdlCity.DataSource = myItems.FindAll(delegate (MyItem myItem)
        //{
        //    return myItem.ItemParent == DdlProvince.SelectedValue;
        //});
        //add（）方法添加项，Clear()方法删除所有项
        DdlCity.Items.Clear();
        //第三种委托的写法-->n表达式，最简单
        DdlCity.DataSource = myItems.FindAll(MyItem => MyItem.ItemParent == DdlProvince.SelectedValue);
        DdlCity.DataBind();
    }
    //创建数据集
    private void CreateData()
    {
        //itemText:对应数据源中的一个字段，该字段所有内容被显示于下拉列表中
        //itemValue：对应数据源中的一个字段，指定下拉列表中每个可选项的值
        //0表示itemParent属性，没有上级
        myItems.Add(new MyItem("bj", "北京市", "0"));
        myItems.Add(new MyItem("sh", "上海市", "0"));
        myItems.Add(new MyItem("jx", "江西省", "0"));
        myItems.Add(new MyItem("gd", "广东省", "0"));
        myItems.Add(new MyItem("hb", "湖北省", "0"));
        //bj表示itemParent属性，上级为北京市
        myItems.Add(new MyItem("haidian", "海淀区", "bj"));
        myItems.Add(new MyItem("xujiahui", "徐家汇区", "sh"));
        myItems.Add(new MyItem("nanchang", "南昌市", "jx"));
        myItems.Add(new MyItem("jiujiang", "九江市", "jx"));
        myItems.Add(new MyItem("guangzhou", "广州市", "gd"));
        myItems.Add(new MyItem("wuhan", "武汉市", "hb"));
    }
    //设置第一级下拉列表的选择条件,检索
    private bool _f(MyItem item)
    {
        return item.ItemParent == "0";
    }

    //DropDownList和Listbox控件都允许用户从列表中选择数据项
    //区别在于DropDownList的列表在用户选择数据项前处于隐藏状态
    //而ListBox的列表是可见的，并且可以同时选择多项
    //SelectionMode="Multiple"   AutoPostBack="True"
    protected void LbSkill_SelectedIndexChanged(object sender, EventArgs e)
    {
        LblSkill.Text = "";
        for (int i = 0; i < LbSkill.Items.Count; i++)
        {
            if (LbSkill.Items[i].Selected)
            {
                LblSkill.Text += LbSkill.Items[i].Text;
            }
        }
    }

    //点击CheckBox后的反应:只有点击同意后，提交按钮才可以被点击，不点击同意，提交按钮为灰色
    protected void ChkbAgree_CheckedChanged(object sender, EventArgs e)
    {
        if (ChkbAgree.Checked)
        {
            BtnSubmit.Enabled = true;
        }
        else
        {
            BtnSubmit.Enabled = false;
        }
    }
}

class MyItem
{
    private string itemValue;
    private string itemText;
    private string itemParent;
    //快速重构-->生成构造函数
    public MyItem(string itemValue, string itemText, string itemParent)
    {
        this.itemValue = itemValue;
        this.itemText = itemText;
        this.itemParent = itemParent;
    }
    //快速重构-->字段
    public string ItemValue { get => itemValue; set => itemValue = value; }
    public string ItemText { get => itemText; set => itemText = value; }
    public string ItemParent { get => itemParent; set => itemParent = value; }
}